CognitoのカスタムメッセージLambdaトリガーを使ってみた
こんにちは。カトアキです。
夏ですね。
僕の住んでいる会津では今トマトが旬です。 会津トマトは春のアスパラ・秋の米(&日本酒!)・冬の会津地鶏と並ぶ4大名物(カトアキ調べ)の一つです。 こちらは盆地のため、昼は暑くて夜が寒いというのは嫌な面もありますが、この寒暖差によって美味しいトマトとか米が食べられるのはいいところです。県外の方はもしこちらにいらしたときはぜひ食べてみてください。
はじめに
さて、唐突な食の話から本題に移ります。
Cognitoでユーザ登録の仕組みを作ると、新規登録時に指定したメールアドレス宛に検証コードが送信され、コードを入力することで登録を完了するという流れにすることができます。
その上で、カスタムメッセージLambdaトリガーを使用すると、検証コードを送信する際に送るメールの内容を動的に変更することができるのでそちらを試してみました。それについてお伝えします!
今回やってみたこと
サインアップの検証コードを受け取る際のデフォルトのメール文面は次のようになっています。
メールには検証コードが記載されていますが、これには有効期限があります。24時間です。
24時間後っていつ?というのが、ちょっとわかりづらい人がいるかもしれません。今回は、「有効期限は 8/2の10:00までです」といった形で期限を動的に出してあげるものを作ってみることにしました。
どうやるのか
進め方
- 動的なメッセージを構成・出力するためのLambda Functionを作成します
- 作成したLambda FunctionをCognitoのユーザプールのトリガーに設定します
Lambda Functionの作成
以下のようなLambda Functionを作成します。
コード:
import datetime message_template= ''' <html> <head></head> <body> <p>確認コード:{{####}} </p> <br/> <p>※有効期限は{limit}までとなります。ご注意ください。</p> </body> </html> '''.strip() def handler(event, context): now = datetime.datetime.now() after_24hours = now + datetime.timedelta(hours=24) message = message_template.format(limit=after_24hours.strftime('%Y-%m-%d %H:%M:%S')) event['response']['emailSubject'] = '検証コードの送付' event['response']['emailMessage'] = message event['response']['smsMessage'] = message print(event) return event
環境変数:
TZ | Asia/Tokyo |
その他の設定
ランタイム | Python 3.7 |
ハンドラ | lambda_function.handler |
Cognitoの設定
ユーザプールのカスタムメッセージトリガに↑で作成したLambda Functionをセットします。
動作確認
サインアップ:
CLIでユーザープールにサインアップします。
$ aws --profile $profile cognito-idp sign-up \ --client-id $clientId \ --username $username \ --password $password \ --user-attributes \ Name="phone_number",Value=“$tel”,\ Name="email",Value="$mailAddress" \ Name="name",Value=$username
上記コマンドのオプションですが、各自の環境に合わせて変更する必要があります
項目 | 説明 | 例 |
profile | AWS-CLIのプロファイルです | katoaki_dev |
clientId | ユーザプールのアプリクライアントID※なければ作成してください※例の値はダミーです。 | 266tupoikdklbu0tliaa1lil99 |
username | 登録するユーザ名です | katoaki |
password | 登録するパスワードです※ユーザプールのポリシーに沿っている値をセットしてください。 | Yg74ahjX |
mailAddress | 登録するメールアドレスです。ここに検証コードについてのメールが届きます。※例のメアドはダミーです | [email protected] |
tel | 登録する電話番号です | 818012345678 |
userpoolid | ユーザプールIDです | ap-northeast-1_UaaaFrPLiS |
CLIの公式な説明はこちらを参照ください:[参考]cognito-idp — AWS CLI 1.16.209 Command Reference
コマンドを実行し、次のようにメールが届きました。
最後に、サインアップしたユーザを次のコマンドで削除しておきます。
ユーザ削除:
$ aws --profile $profile cognito-idp admin-delete-user \ --user-pool-id $userpoolId \ --username $username
さいごに
ちなみにですが、カスタムメッセージLambdaトリガーはサインアップ以外のイベントもハンドリングすることができます。
[参考]Lambda トリガーを使用したユーザープールワークフローのカスタマイズ - Amazon Cognito
誰かの参考になれば幸いです。それから、忘れた頃の自分の助けになればと思ってもいます。